package algorithm.dp;

// https://leetcode.cn/problems/three-steps-problem-lcci/
// 三步问题
public class LCCI0801 {
    public int waysToStep(int n) {
        int MOD = (int) 1e9 + 7;
        // 处理边界值
        if (n == 1 || n == 2) {
            return n;
        }

        // 1. 创建一个 dp 数组
        int[] dp = new int[n+1];

        // 初始化数组, 使其填表不越界
        dp[1] = 1; dp[2] = 2; dp[3] = 4;

        // 填表
        for (int i = 4; i <= n; i++) {
            dp[i] = ((dp[i-3] + dp[i-2]) % MOD + dp[i-1]) % MOD;
        }

        return dp[n];
    }
}
